Caso de estudio | Iflow

Fecha de publicación

25 de octubre de 2024

1 Introducción

En el marco del Primer Desafío Internacional de la Red Latinoamericana de Ciencia de Datos, este análisis tiene como propósito abordar un problema práctico del ámbito logístico. El proyecto promueve la colaboración entre estudiantes de diversas universidades latinoamericanas, fomentando el trabajo en equipo y la toma de decisiones basadas en datos reales.

El objeto de estudio es un conjunto de datos proporcionado por iFlow, una empresa argentina especializada en logística integral, con operaciones tanto nacionales como internacionales dentro del MERCOSUR. iFlow se dedica a la gestión y co-gerencia de cadenas de abastecimiento para sus clientes, buscando optimizar procesos y mejorar la eficiencia operativa.

Este análisis tiene como objetivo:

  1. Comprender y describir las principales características del conjunto de datos, que incluye registros de entregas realizadas en un período de tres meses.

  2. Identificar patrones y tendencias que permitan obtener insights relevantes sobre las operaciones de iFlow.

  3. Detectar posibles inconsistencias o errores en la base de datos, propias de un entorno operativo real, para evaluarlas e integrarlas al análisis.

2 Limpieza de datos.

La primera etapa de este análisis consistió en la limpieza de datos. Este proceso de limpieza fue clave para preparar los datos para un análisis exploratorio robusto y la generación de insights confiables sobre la operación logística de iFlow.

En primer lugar realizamos algunos cambios para facilitar el trabajo con los datos.

  • Tratar Columnas innecesarias

    La columna InicioVisitaPlanificado y FinVisitaPlanificado contienen los mismos valores por lo que las unificamos en una nueva columna.

  • Formatear correctamente las variables
  • Renombrar las columnas por nombres intuitivos.

Con estos cambios realizados pasamos a modificaciones y arreglos necesarios para un análisis correcto de los datos.

  • Eliminación de filas duplicadas.
  • Arreglo de coordenadas faltantes en algunas entregas.

    El dato de coordenadas en algunas filas estaba vacio o indicaba “0”. En algunos de estos casos pudimos rellenar estas coordenadas con datos existentes del domicilio (21 filas). En caso de que esto no sea posible las filas fueron eliminadas (19 filas) y no serán tomadas en cuenta para el análisis.

Por último creamos algunas nuevas columnas para distintos análisis. Entre estas algunas columnas para facilitar la interacción con fechas y horarios de entregas.

3 Vista general.

En esta sección ofrecemos una visión superficial de los datos, brindando un panorama inicial que permite familiarizarnos con su estructura y contenido.

Se registraron 27.419 entregas de dos clientes distintos: 16,545 del cliente 20 y 10.874 del cliente 70.

Todas estas entregas fueron realizadas entre el 3 de mayo y 8 de agosto de 2024, con un promedio de 9.005 entregas por mes

Este gráfico de barras muestra la cantidad de entregas realizadas cada mes, separadas por cliente. Las barras están agrupadas por mes y se distinguen por colores para cada cliente.

La cantidad de entregas es constante entre mayo y julio, con algunas variaciones entre los clientes. Esto indica un comportamiento predecible en la demanda mensual. Planificar recursos en función de estos patrones puede mejorar la eficiencia operativa.

En este gráfico se visualiza la cantidad total de entregas realizadas por mes, sin importar el cliente.

n patrón estable en el número de entregas permite predecir la demanda mensual. Las caídas pueden ser analizadas más adelante para identificar feriados o problemas en la operación.

3.1 ¿Cuales son los horarios de entrega?

Este gráfico de calor muestra la cantidad de entregas realizadas según la hora del día y el día de la semana. Cada celda del gráfico representa un cruce entre una hora y un día, con colores más intensos indicando una mayor cantidad de entregas.

Mayor actividad: El miércoles alrededor de las 15:00 es el momento con más entregas. Patrón semanal: Hay menos actividad los fines de semana, especialmente los domingos, donde casi no se registran entregas.

Vemos que el domingo hay solo 3 entregas. Esto podría deberse a un error por lo que las revisamos.

Orden Localidad Fecha y hora de entrega
81943 CAPITAL FEDERAL 2024-07-21 23:51:00
100968 CAPITAL FEDERAL 2024-07-21 23:51:00
100968 CAPITAL FEDERAL 2024-07-21 23:51:00

Al revisar estas entregas encontramos que las tres fueron entregadas a las 23:51. Esto podría deberse a un error en la carga de datos o a entregas especiales. Al ser las últimas entregas del día puede deberse a un cierre automático del sistema despues de haber dejado entregas inciadas el día anterior sin marcar su finalización.

Si bien este parece ser un caso puntual existen dos grandes problemas respecto a los horarios y duración de las entregas. Estos problemas son.

  1. Duración de las entregas: Muchas entregas tienen el mismo horario de inicio y fin. Esto puede deberse a errores en la carga de datos o a un sistema de carga poco eficiente.

  2. Entregas consecutivas: Muchas entregas consecutivas fueron cargadas con el horario de la entrega anterior. Esto dificulta la identificación de rutas, estimación de tiempos muertos y duraciones reales entre entregas.

3.2 Errores de carga en horarios de entrega.

Notamos que en las entregas muy cercanas geograficamente, en la misma cuadra, suelen tener el mismo horario de finalización. Esto se puede deber a que los operarios olvidan hacer la carga individual o consideran mas rapido completar ambas entregas antes de registrarlo en el sistema.

Junto con los errores de carga en los horarios de entrega este puede ser un segundo indicador de que el sistema de carga puede ser mejorado para no recolectar datos erroneos en el futuro.

Horarios cargados de forma incorrecta podrian causar:

  1. Mala estimación sobre tiempos muertos.
  2. Dificulta optimizar los procesos de entrega.
  3. Perjudica la proyección de horarios de entregas o ventanas horarias.

Algunas sugerencias e ideas para mejorar esto incluyen:

  • Mejoras de la interfaz en el sistema de carga para facilitar y fomentar su uso.

  • Implementación de un sistema de validación de los datos para evitar duplicados.

  • Desarrollo y uso de hardware específico para la carga de datos.

¿Cuál es el tiempo promedio entre el inicio y fin de las visitas de entrega?

Bien cargados 17142 vs mal cargados 10255 mal. Pero encontramos que son incluso más. Una forma de solucionarlo podría haber sido ordenar las entregas en orden cronologico e intentar estimar la duración real segun el tiempo entre las entregas y la distancia entre ellas pero al intentar esto encontramos que muchas entregas consecutivas arrastran errores. Dificultando la identificación de rutas, estimación de tiempos muertos y duraciones reales entre entregas.

Como referencia, el día 2024-06-27 16:06:00 hay 23 entregas graficadas el mismo día.

¿Que tan frecuente es este error? Muy frecuentes

Con 12799 entregas con horarios mal registrados representando un 46.67% los datos disponibles cargados de forma incorrecta.

Al desconfiar del 46.67% de los datos es dificil y poco preciso cualquier tipo de analisis sobre la eficiencia operativa de las entregas. Esto puede traer posibles problemas como:

  1. Problema 1
  2. Problema 2

Solucionar esta situacion representa una gran oportunidad y facilitaria exponencialmente el crecimiento de la empresa, precision de las ventanas de entrega, identificación de cuellos de botella reales y a final de cuentas la toma de decisiones operativas.

“Lo que no se mide, no se puede mejorar.” - Peter F. Drucker

A continuación listamos algunos posibles motivos y oportunidades para corregir la situación.

  1. Manual de uso y capacitación sobre el sistema UNIGIS

Basandonos en el Manual de transportistas - Elementos de seguridad y APPS encontramos la siguiente referencia sobre el uso de la aplicación.

Capacitar mejor al personal con mayor cantidad de recursos, claridad en los instructivos y videos demostrando el uso correcto del sistema videos demostrando el uso correcto del sistema mejoraría la precision de la carga de los datos en el futuro.

  1. Creación de una interfaz personalizada para Unigis.

El error de carga de horarios iguales en entregas consecutivas puede deberse principalmente a la dificultad de uso del sistema o poca practicidad del mismo por la que los transportistas podrían saltear los pasos del instructivo.

Si migrar a un nuevo sistema más moderno es una alternativa muy costosa podrían considerar hacer una inversión en desarrollo frontend para, utilizando la API del sistema actual, puedan tener una interfaz más amena a los transportistas.

Referencia del Uso de la API cloud de Unigis

Referencia del Uso de la API cloud de Unigis

El desarrollo de una interfaz personalizada para interactuar con su sistema actual podría ser una inversión considerable pero economica contrastando con la posibilidad de un desarrollo personalizado o la migración a un nuevo sistema.

Algunas consideraciones:

  • Inversión en equipo e investigación UX para asegurar el uso intuitivo de los transportistas. Es importante entender como es el uso del sistema en la practica.
  1. Migrar a un sistema más moderno o diseñar uno a medida para sus necesidades.

    Puede ser la opción mas costosa.

3.3 Información de bultos y peso.

¿Cuál es el promedio de bultos, peso y unidades entregadas por pedido?

En promedio cada entrega tiene:

  • 28.40 Unidades

  • 5.75 Bultos

  • Un peso de 41.15kg

  • Un peso promedio elevado por pedido puede indicar productos de gran volumen o de alto consumo. Esto tiene implicaciones en los costos de transporte y las rutas de entrega.

[1] 28.40304

[1] 5.756564

[1] 41.15846

3.4 Distribución geográfica de las entregas.

¿Cuál es la distribución de entregas por localidad o región?

Como podemos ver este mapa de entregas de la ciudad de Buenos Aires muestra visualmente la dispersión de las entregas en la ciudad. La variedad de colores permite ver qué clientes se agrupan en ciertas áreas. Si ciertos clientes concentran entregas en una región específica, eso puede indicar una demanda localizada o preferencia regional de ciertos productos.

En este mapa las áreas con mayor densidad de entregas resaltan visualmente. Estas zonas de alta actividad pueden representar zonas comerciales o residenciales clave. Esto es útil para optimizar las rutas de entrega y asignar más recursos a zonas con alta demanda.

Para verlo de forma más resumida;

En base a este mapa se permite ver cómo se distribuyen las entregas a nivel de barrio. Los barrios con mayor intensidad de color son aquellos con más entregas, lo que indica la importancia de estos barrios en el volumen de pedidos.

Similar al mapa por barrio, pero agrupando entregas por comunas. Las comunas que presentan más entregas destacan como puntos de interés para analizar el impacto logístico y la demanda concentrada.

Los puntos en el mapa de Buenos Aires representan ubicaciones de entregas, y las áreas con mayor densidad de entregas aparecen con colores más intensos, permitiendo identificar visualmente las zonas con más actividad de entregas.

`summarise()` has grouped output by 'latitud'. You can override using the
`.groups` argument.

3.4.1 PENDIENTE Centro de distribución en Mendoza.

mostrar grafico, imagen de google maps y explicación.

¿Cuántas entregas se hicieron fuera del tiempo esperado o planificado?

`summarise()` has grouped output by 'mes'. You can override using the `.groups`
argument.

Este gráfico permite la visualización de la cantidad de entregas por mes, clasificadas en “Tarde” y “Temprano o a Tiempo”.

¿Qué clientes generan más volumen de entregas y cuáles presentan más problemas o irregularidades?

Este mapa permite la visualización de un mapa interactivo que muestra las entregas realizadas, clasificado por cliente, en Buenos Aires.

3.5 Conclusiones

4 Segmentación y patrones en entregas.

4.1 PENDIENTE Volumen y Distribución de Entregas

¿Cuántas entregas corresponden a cada cliente?

Este gráfico de barras permite la visualización de la cantidad total de entregas realizadas por cada cliente, utilizando barras que muestran el número de entregas para cada uno

Identificar entregas recurrentes a domicilios,

`summarise()` has grouped output by 'cliente'. You can override using the
`.groups` argument.

Este gráfico de lineas permite la visualización de la cantidad de entregas realizadas por cliente a lo largo de los días de la semana, excluyendo el domingo. Utiliza líneas para representar la evolución del número de entregas para cada cliente, con puntos destacados en cada día.

Los domicilios reciben entregas de un único cliente o solo 20 o 70?

Total de ordenes con más de una entrega: 5027

Este gráfico permite la visualización de la distribución de la cantidad de entregas por domicilio, mostrando un histograma que representa la frecuencia de entregas para diferentes valores.

Este gráfico de barra permite la visualización de la cantidad de domicilios que han recibido más de una entrega. Utiliza barras para representar el número total de domicilios, distinguiendo entre aquellos que tienen mas de una entrega y los que no.

¿Qué porcentaje de entregas se concentra en las localidades más activas?

zonas de entregas.

Este gráfico permite la visualización de cuántas entregas se han realizado en cada cluster, mostrando la cantidad de entregas en un gráfico de barras. Las barras están ordenadas de mayor a menor, lo que facilita ver rápidamente en qué clusters hay más actividad

Este mapa permite la visualización de las áreas cubiertas por cada cluster en Buenos Aires, utilizando envolventes convexos para representar la extensión de cada grupo de entregas. En él, se muestran los puntos de datos de las entregas, coloreados según su cluster, lo que facilita identificar visualmente la distribución geográfica.

`summarise()` has grouped output by 'cluster'. You can override using the
`.groups` argument.

Este grafico de barras muestra la cantidad de entregas por dia de la semana y por cluster. El gráfico permite comparar fácilmente la cantidad de entregas realizadas en cada día, desglosadas por los diferentes clusters identificados en Buenos Aires.

`summarise()` has grouped output by 'cluster'. You can override using the
`.groups` argument.

Este gráfico de barras permite visualizar la cantidad de entregas por cluster, mostrando en el eje X los diferentes clusters y en el eje Y el número total de entregas, con cada barra coloreada según el cliente para facilitar la comparación de la distribución de entregas en Buenos Aires.

4.2 PENDIENTE Eficiencia y Rendimiento Operativo

¿Cuál es el tiempo promedio de entrega por cliente y por localidad?

¿Qué zonas presentan mayores retrasos o entregas fuera de tiempo?

Identifica áreas con posibles cuellos de botella logísticos.

¿Se detectan diferencias significativas en los tiempos de entrega según la cantidad de bultos o peso?

5 Análisis de series temporales

Tenemos 4 grandes caidas en las entregas por lo que buscamos identificar el motivo en cada fecha.

Fecha Cantidad de entregas Motivo
Jueves 9 de mayo 0 FNTC (Camioneros) adhiere al paro general del 9 de mayo*.
Jueves 20 de junio 138 Feriado nacional* Paso a la Inmortalidad del Gral. Manuel Belgrano
Domingo 21 de julio 3 Como explicamos anteriormente , según nuestros datos iflow no realizan entregas los domingos.
2 de agosto 11 Por simplicidad asumimos que se debe a falta de datos en la fecha para comparir el dataset.

Para realizar un pronóstico de demanda para el mes de agosto vamos no vamos a tomar en cuenta estos 4 casos asumiendolos como irrelevantes para el modelo. Limitando los datos hasta el 30 de julio

Con los datos ordenados ahora podemos descomponer la serie temporal en tendencia, estacionalidad y residuales.

Series: train_ts 
ARIMA(1,0,1) with non-zero mean 

Coefficients:
          ar1     ma1      mean
      -0.5190  0.7919  380.8660
s.e.   0.2562  0.1729    9.5105

sigma^2 = 3140:  log likelihood = -243.59
AIC=495.19   AICc=496.19   BIC=502.41
Series: train_ts 
ARIMA(1,1,1) 

Coefficients:
         ar1      ma1
      0.2272  -1.0000
s.e.  0.1542   0.0654

sigma^2 = 3337:  log likelihood = -241.57
AIC=489.14   AICc=489.74   BIC=494.5
Errores ARIMA(1,0,1):
 MAE: 37.44719 
 RMSE: 44.1846 
Errores ARIMA(1,1,1):
 MAE: 36.75162 
 RMSE: 43.85659 

6 Unidades de Transporte

En los datos proporcionados no contamos con la información necesaria para realizar un análisis específico de las unidades de transporte, ya que sería indispensable disponer de un identificador único para cada vehículo. Sin embargo, incluimos esta sección como prueba de concepto para demostrar el valor que podría generar este tipo de análisis en la operación logística. Disponer de esta información permitiría evaluar aspectos fundamentales de la gestión de la flota, optimización de rutas y eficiencia operativa.

A continuación, presentamos algunas preguntas clave que podrían responderse con un análisis detallado de las unidades de transporte:

6.1 Preguntas sobre Desempeño y Utilización de la Flota

  1. ¿Cuánto tiempo real dedica cada unidad a entregas versus tiempo muerto (espera, carga, mantenimiento)?

  2. ¿Cuáles son los tiempos de ruta promedio por camión y cómo varían según la región?

  3. ¿Es necesaria la cantidad actual de camiones, o existe capacidad ociosa que podría aprovecharse?

  4. ¿Hay rutas o zonas específicas donde sería más eficiente reducir o ampliar la flota?

  5. ¿Qué porcentaje de las unidades completan sus rutas dentro de los tiempos planificados?

6.1.0.1 Preguntas sobre Optimización de Rutas y Rendimiento

  1. ¿Se podrían consolidar entregas para reducir la cantidad de viajes sin afectar el servicio?

  2. ¿Existen unidades con rutas ineficientes que podrían optimizarse con ajustes?

  3. ¿Cuál es la relación entre la distancia recorrida y el volumen entregado por unidad?

  4. ¿Se podrían reducir tiempos muertos al mejorar la planificación de entregas o las ventanas horarias?

Si bien no contamos con la información completa sobre las unidades de transporte, hemos realizado estimaciones basadas en los datos disponibles y presentamos nuestro análisis como aproximación para obtener insights relevantes.

Ver las sedes de Iflow (que conocemos)

Graficar la primera entrega de cada día. Graficar la primera y segunda entrega de cada día. Esperariamos que estas entregas rodeen cada sede. Entender su comportamiento.

Primera y segunda entrega de cada día

Grafico de orden de las entregas de un día en específico.

Conclusiones:

  • Parece que los camiones no mezclan productos del cliente 20 y 70.

  • Tiempos muertos, identificar trayectorias por distancia.

  • Errores de carga cuando hay localidades consecutivas.

Grafico de trayectoria en orden para cada cliente. Identificar puntos que demuestran rutas poco eficientes. Cruces de lineas, tiempo perdido.

Graficar tiempo entre entregas por hora del día. (Tiempo muerto)

Ampliar u organizar nuevos centros de distribución. (En base a los datos de estos dos clientes), Segmentación de entregas (global y por cliente) para identificar puntos donde sería ideal. (Centro de zona, cruce de zonas, cluster con más o menor actividad)

6.2 Intentos de identificar transportistas.

A priori y para facilitar el análisis podríamos suponer que las entregas las realizan dos camiones. Uno para cada cliente. Podemos validar que esto es incorrecto al estudiar las entregas de un único cliente.

Vemos que entre la entrega 18 y 19 pasaron menos de 3min

Hay algunos casos donde podemos identificar camiones distintos:

  • Grandes distancias en poco tiempo.

  • Cruces de rutas.

Los cruces de trayectorias podrían indicar rutas ineficientes de los repartidores o que se estan siguiendo varios repartidores en la misma ruta. Podemos verlo de forma clara en el siguiente gráfico:

Habiendo identificado estas caracteristicas podríamos utilizar un modelo de agrupamiento para estimar distintos repartidores y sus trayectorias.

Esto tiene un gran valor para:

  1. Identificar rutas ineficientes.
  2. Estimar un tiempo de duración de cada entrega (Y rellenar vacios)
  3. Identificar patrones en los errores de carga de datos (Duración de entregas)

Para la aplicación practica de estos analisis sería vital tener acceso real a los camiones o repartidores responsables de cada entrega pero para el bien de este analisis intentamos aproximar lo más posible a estos datos utilizando modelos estadisticos. Esperamos sirva como prueba de concepto para evaluar el potencial de recolectar estos datos.

Esto nos presenta un problema que podría solucionarse con coloración de grafos.

Construir el grafo de conflictos:

  • Nodos: Cada nodo representa una entrega individual con su respectiva latitud, longitud, fecha y hora.

  • Aristas (conflictos): Se dibuja una arista entre dos entregas si es imposible que hayan sido realizadas por el mismo repartidor debido a restricciones de tiempo y distancia.

    • Criterio de conflicto: Para dos entregas AAA y BBB, se calcula el tiempo mínimo necesario para que un repartidor viaje desde la ubicación de AAA a BBB considerando una velocidad razonable (por ejemplo, la velocidad promedio de un vehículo en esa área).

    • Si el tiempo transcurrido entre la hora de entrega de AAA y BBB es menor que el tiempo mínimo de viaje calculado, entonces se establece un conflicto entre AAA y BBB.

Algoritmos sugeridos:

  • Algoritmo Greedy de coloreo: Un enfoque sencillo que asigna colores a los nodos de forma secuencial, utilizando el menor número de colores posible en cada paso.

  • Heurísticas avanzadas: Si el grafo es grande y complejo, pueden emplearse algoritmos como DSATUR o técnicas metaheurísticas (algoritmos genéticos, recocido simulado) para aproximar una solución cercana al mínimo número de colores.

Algunos resultados obtenidos utilizando el algoritmo Greedy de coloreo con python:

Si bien funciona correctamente para alrededor de 20 entregas a medida que agregamos datos se dificulta el algoritmo y considerando las incosistencias de los datos y errores de carga no sería adecuado estimar usando este algoritmo en su estado actual.

Algunas consideraciones.

  • Toma en cuenta una velocidad promedio de los camiones arbitraira

Si bien podría ser interesante utilizar un algoritmo para resolver o estimar el problema. Evidentmente la mejor solución es tomar los datos de UNIGIS o un software automatico. De todas formas no se podrá extraer valor real con datos de tiempo erroneos.

Esta estimación nos presenta algunas preguntas sobre factores de las entregas.

  1. Rutas optimizadas.

    Gracias al análisis podemos ver que las rutas estan optimizadas pero parecen estar diseñadas para transportistas individuales y no para la flota como grupo. Optimizar las rutas de entregas para toda la flota como un ente es distinto a diseñar la ruta para cada camion entre dos puntos.

7 Conclusiones

8 Apéndice

https://www.youtube.com/watch?v=V8eXoIFcMgM

Incluir enlace interno para versión del trabajo con el codigo y comentarios.

Incluir el enlace al repositorio de Github

Referencias de estudio sobre Lastmile logistics, ETL in logistics y clustering geoespacial DBSCAN, H3 oreilly